//Lets define type for operators
#ifndef VM_H
#define VM_H

#ifdef __cplusplus
extern "C" {
#endif
typedef void (*OperatorProc) (int);
typedef unsigned long platter;
typedef platter dataType;

struct VM
{
	OperatorProc operators[14]; 
	platter registers[8]; 
	int *pFinger; 			//execution finger
	platter heap[sizeof(platter)];
	platter heapIndex;
};

void conditionalMove(dataType data);
void arrayIndex(dataType data);
void arrayAmendment(dataType data);
void addition(dataType data);
void multiplication(dataType data);
void division(dataType data);
void not_and(dataType data);
void halt();
void allocation(dataType data);
void abandonment(dataType data);
void output(dataType data);
void input(dataType data);
void loadProgram(dataType data);
void orthography(dataType data);

void extract_indexes(dataType data, char indexes[3]);
void fail();
#ifdef __cplusplus
}; //extern "C"
#endif
#endif
//VM_H

